Linux 您所在的位置:网站首页 Linux的init 3 Linux

Linux

2024-02-04 10:14| 来源: 网络整理| 查看: 265

1. init简介 2. init简史 3. init现状     3.1 OpenRC     3.2 Systemd     3.3 使用命令对比     3.4 systemd 备受争议,仍然一同天下? 4. 主流Linux发行版使用的init列表 5. init对比 6. 值得期待更好的init替代品

1. init简介

https://en.wikipedia.org/wiki/Init 在基于Unix的计算机操作系统中,init(初始化的简称)是在启动计算机系统期间启动的第一个进程。 Init是一个守护进程,它将持续运行,直到系统关闭。 它是所有其他进程的直接或间接祖先,并自动采用所有孤立进程(adopts)。 Init 在启动过程中由内核启动 ; 如果内核无法启动它,将发生内核恐慌。 通常为Init分配进程标识符 1。

2. init简史

就GNU/Linux而言,最常见的首先是sysvinit。 然后Apple创建了launchd,这启发了Ubuntu制作Upstart。 大约2007年,Gentoo开始使用OpenRC。 接着在2010年systemd改变了一切。到2015年,基本一统天下,大部分Linux发行版都采用Systemd作为默认init。 更完整的历史请看: https://blog.darknedgy.net/technology/2015/09/05/0/ 现代初始系统的历史(1992-2015)

3. init现状 大部分主流Linux发行版采用systemd; Gentoo支持多种内核的特性,需要使用OpenRC(因为可移植性?),但在使用Linux内核时可安装为Systemd; Apple的mac OS使用lanuchd。https://en.wikipedia.org/wiki/Launchd

还有极少数Linux发行版仍在使用SysV作为默认init;以及一些非广泛场景的其他init。 https://en.wikipedia.org/wiki/Operating_system_service_management

Service Control Manager - 由Microsoft Windows使用 Android init - 由谷歌Android使用 Service Management Facility - 由illumos发行版和Oracle Solaris使用 sysvinit - 由较旧的类Unix操作系统使用 rc.d or rcorder-based init - 由BSD操作系统使用 cygserver - 由Cygwin使用 runit - 由Void使用 The GNU Shepherd - 由Guix系统分发GuixSD和GNU Hurd使用,但设计用于Guile可用的每个类似POSIX的系统

关于古老的Slackware发行版使用的init? wiki百科的对比列表里Slackware使用BSD init scripts作为init distrowatch的Slackware页面,使用SysV作为init https://distrowatch.com/table.php?distribution=slackware

Slackware可以使用OpenRC http://docs.slackware.com/howtos:general_admin:openrc?s[]=init OpenRC提供了许多功能,如硬件启动的initscript运行和cgroups支持,无需进行大的布局更改。 有两个Slackbuild可用,openrc包含OpenRC init系统,openrc-services包含用于OpenRC的各种服务。

3.1 OpenRC

https://en.wikipedia.org/wiki/OpenRC https://github.com/OpenRC/openrc http://wiki.gentoo.org/wiki/OpenRC 与Linux一样,OpenRC也可用于多个BSD系统。它是由一个NetBSD开发人员创建的,他开始了Gentoo/FreeBSD项目。 OpenRC提供以下功能:

可在Linux,TrueOS,FreeBSD和NetBSD之间移植 并行服务启动(可选,正在开发中) 基于依赖关系的启动 通过cgroup进行流程隔离 每服务资源限制(ulimit) 代码和配置的分离(init.d / conf.d) 用户可自定义的易于扩展的启动脚本 除了基本的“开始,停止和状态”之外,能够包含无限多种命令 有状态的init脚本(它已经启动了吗?) 用于启动多个组件的复杂init脚本(Samba(smbd和nmbd),NFS(nfsd,portmap等)) 自动依赖计算和服务排序 正确集成到容器/虚拟化(Linux-VServer,OpenVZ等 适当的模块化架构和可选组件的分离(Cron,syslog) 富有表现力和灵活的网络处理(包括VPN,网桥等) 支持裸机裸依赖服务器 详细的调试模式

项目主页: https://wiki.gentoo.org/wiki/Project:OpenRC OpenRC是一个基于依赖的init系统,基于依赖的rc(运行命令)系统,它与系统提供的init程序一起工作,通常位于/sbin/init。 它不是/sbin/init的替代品。 Gentoo Linux使用的默认init系统是sys-apps/sysvinit,而Gentoo/FreeBSD使用sys-freebsd/freebsd-sbin提供的FreeBSD init 。 OpenRC与Gentoo init脚本100%兼容,这意味着您可以在主Gentoo存储库中找到几个守护进程。 但是,OpenRC并非由Gentoo Linux专门使用,因此我们的目标是与平台无关。

https://wiki.gentoo.org/wiki/Init_system https://wiki.gentoo.org/wiki/OpenRC

3.2 Systemd

https://en.wikipedia.org/wiki/Systemd 该systemd 软件套件提供了一个基本的构建模块的Linux 操作系统。 systemd包括“System and Service Manager”,用于引导用户空间和管理用户进程的init系统。 systemd旨在统一Linux发行版中的服务配置和行为。它取代了UNIX System V和BSD init系统。 自2015年以来,大多数Linux发行版都采用了systemd,并且它被认为是事实上的标准。

3.3 使用命令对比

OpenRC中常用的命令列表及其等效的systemd命令。 https://wiki.gentoo.org/wiki/OpenRC_to_systemd_Cheatsheet https://wiki.archlinux.org/index.php/OpenRC#Usage

描述 SysVinit systemd OpenRC 开始服务 rc.d start daemon systemctl start /etc/init.d/ start rc-service start 停止服务 rc.d stop daemon systemctl stop /etc/init.d/ stop rc-service stop 重启服务 rc.d restart daemon systemctl restart /etc/init.d/ restart rc-service restart 获得服务状态 rc.d (start, stop, restart) daemon systemctl status /etc/init.d/ status rc-service status 显示已知的启动脚本列出运行服务状态 rc.d list systemctl list-units rc-status rc-update show 启动时启用服务 chkconfig daemon on systemctl enable rc-update add 启动时禁用服务 chkconfig daemon off systemctl disable rc-update del 显示所有启动脚本   systemctl list-unit-files --type=service ls /etc/init.d/ rc-update -v show 检查服务失败   systemctl --failed rc-status --crashed 显示所有可用服务。   systemctl --all rc-update -v show 创建或修改配置。 chkconfig daemon --add systemctl daemon-reload   禁用自动生成的服务   systemctl mask   杀死与服务相关的所有流程   systemctl kill   显示记录今天发生的事件,首先记录最近的事件   journalctl -r --since=today   显示特定服务的日志事件   journalctl _SYSTEMD_UNIT=.service  

 

3.4 systemd 备受争议,仍然一同天下?

批评者认为systemd过于复杂,并且持续存在功能蔓延,认为其架构违反了Unix哲学。 还有人担心它会形成一个互锁的依赖系统,从而使分发维护者别无选择,只能采用systemd,因为更多的用户空间软件依赖于它的组件。

https://www.zhihu.com/question/25873473 systemd 为什么会有那么大的争议? https://www.solidot.org/story?sid=41361 systemd作者抨击开源和Linux社区 https://www.solidot.org/story?sid=41219 抗议者创建Systemd分支Uselessd Systemd因其复杂性而饱受Unix哲学(做一件事并做好)拥护者的鞭笞,批评者为此发起了抵制Systemd的运动,呼吁抵制使用Systemd的Linux发行版。

抗议者更进一步的创建了Systemd分支Uselessd,以求简化Systemd的功能。 开发者表示,Uselessd不仅仅是一种政治抗议,他们的目标是创造出Systemd的可靠替代。 Uselessd是基于systemd 208 ,剥离被认为与初始化系统无关的功能如systemd journal和udev。 Systemd只支持Linux,而Uselessd将能移植到BSD。 但这仅仅是曾经的想法,该项目已与几年前暂停至今...

Systemd虽然饱受争议,但其方便使用,快速的优点让他在几年内被大部分发行版接受。

4. 主流Linux发行版使用的init列表 排名 Distribution Default Init system systemd 加入仓库日期 systemd 作为默认init日期 Runs Without? 1 MX Linux SysV       2 Manjaro systemd 2013-11 2013-11   3 Mint systemd 2013-11 2013-11 Yes 5 Ubuntu systemd 2013-04 2015-04   6 Debian systemd 2012-04 2015-04 Yes 7 Solus systemd 2016-10 2016-10 No 8 Fedora systemd 2010-11 2011-05 No 9 openSUSE systemd 2011-03 2012-09 No 15 CentOS systemd 2014-04 2014-04 No 16 Arch Linux systemd 2012-01 2012-10 Yes 21 Kali Linux systemd 2007-03 2015-08   40 Red Hat Enterprise Linux systemd 2014-06 2014-06 No 43 Gentoo Linux[b] openrc 2011-07   Yes 59 GhostBSD openrc       26 FreeBSD RC       60 DragonFly RC       31 Slackware BSD init scripts   N/A Yes

 

5. init对比

https://wiki.gentoo.org/wiki/Comparison_of_init_systems

特征 sysvinit OpenRC systemd launchd runit BSD rc.d SMF Gentoo支持 partially (used by OpenRC)  Yes (default init)  Yes  No  Yes  No  No 包装 sys-apps/sysvinit sys-apps/openrc sys-apps/systemd - sys-process/runit - - 支持的平台 Linux / BSD Linux + BSD Linux MacOSX Linux / BSD / MacOSX BSD Solaris 主要编码语言 C POSIX shell (+ C) C C C POSIX shell (+ C) C 主要依赖 - init (sysv or BSD) D-Bus - - rcorder init(sysv?) 初始化脚本/服务格式 single config file shell scripts config files (ini) plist shell scripts shell scripts XML (+ shell scripts) 每服务配置  No  Yes (conf.d)  Yes  ?  No  No  Yes (service instances) 作为守护进程运行  Yes (PID 1)  Yes (PID 1)  Yes (PID 1)  Yes (PID 1)  Yes (PID 1)  Yes (PID 1)  Yes (invoked) 跨服务依赖/事件  No  Yes  Yes  No  Yes  Yes  Yes 并行服务启动  Yes  Yes (optional)  Yes  Yes  Yes  Yes  Yes 让守护进程保持活力  Yes  Yes (optional v0.21+ via supervise-daemon)  Yes  Yes  Yes  Yes  Yes 首选服务供应商 n/a Gentoo upstream MacOSX Void Linux NetBSD, FreeBSD, OpenBSD Solaris 执照 GPL v2+ 2-cl. BSD LGPL v2.1+ Apache License 2.0 BSD BSD ?

支持的服务(在Gentoo中)

特征 systemd OpenRC 文件系统加载 每个mountpoint两个单元 (fsck+mount),运行时生成依赖项 每组一个脚本 (root, local, network, swap...). getty (终端提示) 每个控制台一个单元, 从模板按需实例化。 通过 /etc/inittab 或agetty脚本启动 网络设置 外部(NetworkManager, networkd, DHCP守护程序) 几个选项, 如dhcpcd  netifrc 或NetworkManager X11显示管理器设置 单独的DM单位。 为所有人提供单一服务(需要自动重启)

 

6. 值得期待更好的init替代品

https://www.funtoo.org/FAQ:Do_You_Support_Systemd 常见问题:你支持Systemd吗? 本页面最后编辑于2018年11月20日 (星期二) 21:00。 Funtoo Linux的部分独特之处在于它的基于依赖性的OpenRC init系统,所以改变它会使它成为Funtoo Linux以外的东西。 所以我们不支持systemd作为Funtoo Linux的一部分。 感谢Dantrell B.和其他人的工作,我们完全支持在不依赖systemd的情况下运行GNOME 3.26。 我们正计划开发一种新的OpenRC风格的初始化系统,其中包含“下一代”功能,这些功能在功能上可与systemd相媲美。

https://www.funtoo.org/FLOP:No-systemd_system systemd如何潜入Funtoo,以及删除它的可能解决方案。

https://www.funtoo.org/Mitigating_Systemd Funtoo目前没有计划迁移或采用systemd作为它的默认init系统。这并不能阻止你使用systemd您的系统上。 例如,CoreOS是基于Gentoo的基于系统的系统。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有